#include "project.h"
#include "es_filesystem.h"
#include "es_iwdg.h"

#include "devcfg.h"

//uart3 test
CUsart g_uart3;

void uart3_evt(u16 val){
	g_uart3.Write(val);
}


/************************************************************************/
/* project实现                                                          */
/************************************************************************/

#define EDIT_CONFIG 0

void Project::Init()
{
	CBoard::Init();

	//初始化
	trace("init.\r\n");
	
	//配置初始化
	dev_config_init();
	view_dev_config();

	//修改配置
	#if EDIT_CONFIG
	DEV_CONFIG* pcfg=get_dev_config();
	strcpy(pcfg->str1,"charme");
	strcpy(pcfg->str2,"bird");
	pcfg->val=9394;
	udpate_dev_config();
	#endif

	
	//本demo关闭了config.h中的uart3预定义，由这里实现uart3的监听
	g_uart3.Init(115200,uart3,1);	//115200,使用中断
	g_uart3.SetUsartItListener(uart3_evt);	//设置uart3事件监听
	
	
	//看门狗初始化
	es_initDog(0x30e);		//5s
}


vu64 t=0;
vu64 last_live=0;

void live()
{
	if(t-last_live>=1000){
		//喂狗
		es_feedDog();
		
		debug("running..%d\r\n",(int)(t/1000));
		es_pc13_led_toggle();

		last_live=t;
	}
}



void Project::Loop()
{
	//派生类必需调用:
	CBoard::Loop();		//使nnp5在主线程引发事件
	
	//在此处进行主线程工作
	t=GetTickCount();
	
	live();
}

void Project::GPIO_Config()
{
	
}

void Project::RCC_Config()
{
}

void Project::NVIC_Config()
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
}



//nnp5类成员

void Project::ack_event(){
	//printf("ack\r\n");
}

void Project::new_pkg_event(unsigned char* buf,int len){
	//显示内容
	pUsart1->Write(buf,len);
}

//nnp5数据发送事件处理
void Project::nnp5_SendDataNeed(unsigned char* buf, int len){
	//使用uart1发送
	pUsart1->Write(buf,len);
}








/************************************************************************/
/* 中断处理函数定义                                                     */
/************************************************************************/
extern Project project;


//串口1接收中断处理
#ifdef USING_USART1
void usart1Handler(u16 val) {
	//传入nnp5
	//project.nnp5_inStream((u8)val);

	project.pUsart1->Write(val);
}
#endif


//串口2接收中断处理
#ifdef USING_USART2
void usart2Handler(u16 val) {
	project.pUsart2->Write(val);
}
#endif


//串口3接收中断处理
#ifdef USING_USART3
void usart3Handler(u16 val) {
	project.pUsart3->Write(val);
}
#endif


//spi1中断处理
void spi1Handle(u8 val) {
#ifdef __USING_7BIT_SERIAL__	
	project.serial.SPINewData(val);
#endif // __USING_7BIT_SERIAL__


}



#ifdef __USING_7BIT_SERIAL__	
//7bit 协议IRQ
void UARTPackageReady(u8* buff, u8 length)
{


}
#endif // __USING_7BIT_SERIAL__






void new24DataEventHandler(u8 flag, u8* sender, u8* data, u8 len)
{
	switch (data[0])
	{
	case 0:
#ifdef __USING_PWM__
		//pwm cmd
		project.pwm.PWM_Input(data[1], data[2]);
#endif//__USING_PWM__
		break;
	}
}


